package com.duoec.magichour.service;

import com.duoec.magichour.dto.UserInfo;
import com.duoec.magichour.dto.request.UserLoginWithCodeDto;
import com.duoec.magichour.dto.request.UserLoginWithPwdDto;
import com.duoec.magichour.dto.request.UserQuery;
import com.duoec.magichour.dto.request.UserRegistSave;
import com.duoec.magichour.dto.response.UserDetailDto;
import com.duoec.magichour.dto.response.UserSimpleInfoDto;
import com.duoec.magichour.pojo.Authorize;
import com.duoec.magichour.pojo.User;

import java.util.List;
import java.util.Map;

/**
 * Created by ycoe on 17/6/25.
 */
public interface UserService {
    List<User> query(UserQuery userQuery);

    /**
     * 通过ID，获取对应用户的基本信息Map
     *
     * @param userIdSet 用户IDset
     * @return
     */
    Map<Long, UserSimpleInfoDto> getUserSimpleInfoMap(List<Long> userIdSet);

    /**
     * 通过用户ID，获取用户信息
     *
     * @param userId 用户ID
     * @return
     */
    User getUser(Long userId);

    /**
     * 通过用户ID，获取用户基本信息
     *
     * @param userId 用户ID
     * @return
     */
    UserSimpleInfoDto getUserSimpleInfo(Long userId);

    /**
     * 用户文章收藏数+1
     *
     * @param userId 用户ID
     */
    void incFavoriteArticle(Long userId);

    /**
     * 文章作者被收藏数+1
     *
     * @param authorId 用户ID
     */
    void incFollowArticle(Long authorId);

    /**
     * 用户发布文章数+1
     *
     * @param userId 用户ID
     */
    void incArticleCount(Long userId);

    /**
     * 用户关注其它用户数+1
     *
     * @param userId 用户ID
     */
    void incFavoriteUserCount(long userId);

    /**
     * 用户粉丝数+1
     *
     * @param userId 用户ID
     */
    void incFansCount(long userId);

    /**
     * 获取某个用户的详情信息
     *
     * @param userInfo 当前登录用户
     * @param userId   要查看的用户ID
     * @return
     */
    UserDetailDto getDetail(UserInfo userInfo, Long userId);

    /**
     * 用户注册
     *
     * @param request 注册信息
     * @return
     */
    UserSimpleInfoDto regist(UserRegistSave request);

    /**
     * 用户登录
     *
     * @param request 登录信息
     * @return
     */
    Authorize loginWithPwd(UserLoginWithPwdDto request);

    /**
     * 退出登录
     *
     * @param userInfo 当前登录用户信息
     */
    void logout(UserInfo userInfo);

    /**
     * 重新设置手机登录密码
     * @param mobile 手机号码
     * @return
     */
    String resetMobilePwd(String mobile);

    /**
     * 使用手机验证码登录
     * @param request 登录信息
     * @return
     */
    Authorize loginWithCode(UserLoginWithCodeDto request);
}
